===============================================================================================
    Parametric Curves - ASSIGNMENT PROJECT
===============================================================================================

This program uses its own designed graphics procedure to generate Uniform Non-Rational B-Spline Curves. 
The application allows for rendering of the parametric curve by providing the values of control points.
Moreover, it is possible to manipulate the control points during run time.

===============================================================================================
HOW TO USE THE PROGRAM
===============================================================================================
1. The application is opened in the console window.
2. User is asked to provide values for 4 control points, respectively for x and y coordinates.
3. User is asked to enter the resolution of the curve. Large values make a curve more smooth.
4. The menu is displayed. User can choose one of these operations:
	- Chose 1 to start the simulation.
	- Chose 2 to change the coordinates of the all control points.
	- Chose 3 to change the coordinates of the one control point.
	- Chose 4 to change the resolution of the curve.
	- Chose 5 to exit the program.
5. After the simulation started the instruction of use is displayed. This help to manipulate the control points.
	User can:
	- Press page left arrow to choose the previous control point.
	- Press page right arrow to choose the next control point.
	- Press "w" to increment the value of y for the control point by 1.
	- Press "s" to decrement the value of y for the control point by 1.
	- Press "a" to decrement the value of x for the control point by 1.
	- Press "d" to increment the value of x for the control point by 1.
	- Press "e" to exit the application.

===============================================================================================
Math Library namespace
===============================================================================================

nMathLibrary.h
nMathLibrary.cpp

This is the main mathematical library. It contains vector and matrix classes and relevant mathematical functions.
It is used to solve computations in computer graphics.

cVector class:

void setVector(double xX, double yY, double zZ = 1) - Setting the values for vector

void displayVector() - Display vector to console window

int returnDistanceToPoint(cVector &p2) - Return the distance between points

void multiplicationMatrixVector(cMatrix3D & m1) - Matrix * Vertex - return product of matrix and vector multiplication

void translatePoint2D(float translateX, float translateY) - Translate point using coordinates

void translatePoint2D(cVector &v) - Translate point using vector
	
void scalePoint2D(float scaleX, float scaleY) - Scale point using coordinates (Non-uniform scaling)

void scalePoint2D(cVector &v) - Scale point using vector (Non-uniform scaling)

void scaleUniformPoint2D(float factor) -  Scale point using factor (Uniform scaling)

void rotatePoint2DAboutZ(double degrees) - Rotate point about z axis

void rotatePoint2DAboutX(double degrees) - Rotate point about x axis
	
void rotatePoint2DAboutY(double degrees) - Rotate point about y axis


cMatrix class:

void setMatrixEntry(size_t row, size_t column, double value) - Setting the specific entry for the given matrix

void createIdentityMatrix() - Identity matrix - return identity matrix

void multiplicationMatrixMatrix(cMatrix3D & m2) - Matrix * matrix - return product of matrix and matrix multiplication

void displayMatrix() - Display matrix in the console window


Lookup Tables functions:

void fillLookupTables() - Filling lookup tables - the function is called at the beginning of the program in GraphicsTemplate.cpp file

double getSin(double degrees) - Return sinus of x degrees

double getCos(double degrees) - Return cosinus of x degrees
	
double getTan(double degrees) - Return tangent of x degrees

void displayLookupTable() - Draft function using to display the lookup tables


Conversion functions:

double toRadians(double degrees) - Convert degrees to radians

double toDegrees(double radians) - Convert radians to degrees

===============================================================================================
GraphicsTemplate
===============================================================================================

This is the main application source file. It is responsible for performing the simulation of the prototype mechanics.
Some new functions are described below.

void displayMenu() - Display menu

void choseMenuOptions(int userChoice) - Chose menu options

void drawLine(cVector &point1, cVector &point2) - Bresenham's line drawing algorithm

void pointClipping(cVector &point) - Point clipping algorithm

void drawPixel(cVector &point) - Check if point is not clipped and draw a pixel

void drawBSplineCurve(cVector &p0, cVector &p1, cVector &p2, cVector &p3, int resolution) - Draw a B-Spline curve

int getResolution() - Return the resolution of the curve
